//
//  LBFTabBar.m
//  Go!
//
//  Created by 凌風 on 16/7/7.
//  Copyright © 2016年 凌风. All rights reserved.
//

#import "LBFTabBar.h"

@interface LBFTabBar ()

// 首页button（圆形按钮）
@property (nonatomic, strong) UIButton *homeBtn;

@end

@implementation LBFTabBar


- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self initSubViews];
    }
    return self;
}

- (void)initSubViews {
    self.backgroundColor = [UIColor whiteColor];
    
    // 添加首页按钮
    [self addSubview:self.homeBtn];
    
    
    
}

//重新布局子视图
- (void)layoutSubviews {
    [super layoutSubviews];
    
    // 系统自带的按钮类型是UITabbarButton，找出这些类型的按钮，然后重新排布位置，空出中间homeBtn的位置
    
    Class class = NSClassFromString(@"UITabBarButton");
    
    self.homeBtn.center = CGPointMake(self.center.x, CGRectGetHeight(self.bounds) * 0.5 - 10);
    
    self.homeBtn.bounds = CGRectMake(0, 0, self.homeBtn.currentBackgroundImage.size.width, self.homeBtn.currentBackgroundImage.size.height);
    
    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"首页-背景"]];
    imageView.frame = CGRectMake(self.homeBtn.frame.origin.x + 1, self.homeBtn.frame.origin.y - 1, self.homeBtn.frame.size.width, self.homeBtn.frame.size.height);
    imageView.transform = CGAffineTransformMakeScale(1.1, 1.1);
    
    [self addSubview:imageView];
    
    UILabel_Font *label = [[UILabel_Font alloc] init];
    label.center = CGPointMake(self.homeBtn.center.x - 10, CGRectGetMaxY(self.homeBtn.frame));
    label.text = @"首页";
    label.font = [UIFont systemFontOfSize:Font(11)];
    label.textAlignment = NSTextAlignmentCenter;
    [label sizeToFit];
    
    label.textColor = [UIColor grayColor];
    
//    [self addSubview:label];
    
    int btnIndex = 0;
    // 遍历tabbar的子控件
    for (UIView *btn in self.subviews) {
        // 如果是系统的UITabBarButton，那么就调整子控件的位置，空出中间位置
        // 每个按钮的宽度等于Tabbar的1/5
        if ([btn isKindOfClass:class]) {
            CGFloat btnW = self.bounds.size.width / 5.0;
            
            // 如果是索引是2(从0开始的)，直接让索引++，目的就是让消息按钮的位置向右移动，空出来发布按钮的位置
//            if (btnIndex == 2) {
//                btnIndex ++;
//            }
            
            btn.frame = CGRectMake(btnW * btnIndex, btn.frame.origin.y, btnW, btn.frame.size.height);
            btnIndex ++;
        }
    }
    
    [self bringSubviewToFront:self.homeBtn];
    
}

//重写hitTest方法，去监听发布按钮的点击，目的是为了让凸出的部分点击也有反应
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    //这一个判断是关键，不判断的话push到其他页面，点击首页按钮的位置也是会有反应的，这样就不好了
    //self.isHidden == NO 说明当前页面是有tabbar的，那么肯定是在导航控制器的根控制器页面
    //在导航控制器根控制器页面，那么我们就需要判断手指点击的位置是否在首页按钮身上
    //是的话让首页按钮自己处理点击事件，不是的话让系统去处理点击事件就可以了
    if (self.isHidden == NO) {
        
        //将当前tabbar的触摸点转换坐标系，转换到发布按钮的身上，生成一个新的点
        CGPoint newP = [self convertPoint:point toView:self.homeBtn];
        
        //判断如果这个新的点是在首页按钮身上，那么处理点击事件最合适的view就是首页按钮
        if ( [self.homeBtn pointInside:newP withEvent:event]) {
            return self.homeBtn;
        }else{//如果点不在首页按钮身上，直接让系统处理就可以了
            
            return [super hitTest:point withEvent:event];
        }
    }
    
    else {//tabbar隐藏了，那么说明已经push到其他的页面了，这个时候还是让系统去判断最合适的view处理就好了
        return [super hitTest:point withEvent:event];
    }

}

#pragma mark -- homeBtn按钮的点击事件回调方法
- (void)respondsToHomeBtn:(UIButton *)sender {
    if (self.myDelegate && [self.myDelegate respondsToSelector:@selector(tabBarHomeBtnClick:)]) {
        
        [self.myDelegate tabBarHomeBtnClick:self];
    }
}

#pragma mark -- Getter
- (UIButton *)homeBtn {
    if (!_homeBtn) {
        _homeBtn = ({
            UIButton *homeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
            
            [homeBtn setBackgroundImage:[UIImage imageNamed:@"首页.png"] forState:UIControlStateNormal];
            [homeBtn setBackgroundImage:[UIImage imageNamed:@"首页.png"] forState:UIControlStateHighlighted];
            
            [homeBtn addTarget:self action:@selector(respondsToHomeBtn:) forControlEvents:UIControlEventTouchUpInside];
            
            homeBtn;
        });
    }
    
    return _homeBtn;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/

@end
